// 职责链模式
// 思想：一系列可能会处理请求的对象被连成一条链，请求在这些对象之间依次传递，直到遇到一个可以处理的对象
// 弊端当链条过长时性能有影响
// after
Function.prototype.after = function(fn){
  const self = this
  return function () {
    let ret = self.apply(this, arguments)
    return ret === 'nextSuccessor' ? fn.apply(this,arguments) : ret
  }
}

// type 1
function do1(type) {
  return type === 1 ? console.log('type1处理了') : 'nextSuccessor'
}
// type 2
function do2(type) {
  return type === 2 ? console.log('type2处理了') : 'nextSuccessor'
}
// type 3
function do3(type) {
  return type === 3 ? console.log('type3处理了') : 'nextSuccessor'
}

const doSth = do1.after(do2).after(do3)

doSth(2)
doSth(3)
doSth(1)